package com.example.lib5.queue;

public class QueueExample2 {
    public static void main(String[] args) {
        MyArrayQueue myArrayQueue = new MyArrayQueue(3);
        System.out.println("原始数组遍历：");
        myArrayQueue.showQueue();//此时打印队列应该位无
        System.out.println("添加三个值后遍历");
        myArrayQueue.addQueue(1);
        myArrayQueue.addQueue(2);
        myArrayQueue.addQueue(3);
        myArrayQueue.showQueue();
        System.out.println("取出的值："+myArrayQueue.takeOutQueue());
        System.out.println("取出的值："+myArrayQueue.takeOutQueue());
        myArrayQueue.showQueue();
    }

    private static class MyArrayQueue {
        int maxSize;
        int rear=-1;
        int front=-1;
        private  int[] arr;

        /**
         *
         * @param max 表示队列的最大长度
         */
        public MyArrayQueue(int max) {
            maxSize=max;
            arr = new int[max];//设置长度
        }
        //遍历数组
        public void showQueue() {
            if (isEmpty()) {
                System.out.println("队列为空，没有数据");
                return;
            }
            for (int i = front+1; i < maxSize; i++) {
                System.out.println(arr[2]);
            }
        }
        //添加数组数据
        public void addQueue(int nextInt) {

            if (isFull()) {//判断队列是否已经满了
                System.out.println("数组最大长度为3，不会再添加");
                return;
            }else {
                arr[rear+1]=nextInt;
                rear++;
            }
            System.out.println("数组的长度："+rear);
        }
        //取出数据
        public int takeOutQueue() {
            if (isEmpty()) {
               throw new RuntimeException("队列为空，不能取数据");
            }
            int i = arr[front+1];
            arr[front+1]=0;
            front++;
            return i;
        }

        /**
         * 队列是否已经满了
         * @return true表示已经满了，false表示队列还没有满
         */
        public boolean isFull(){
            return rear==maxSize-1;
        }

        /**
         * 队列是否为空
         * @return true表示队列为空，false表示队列不为空
         */
        public boolean isEmpty(){
            return rear==front;
        }

    }
}
